package com.huluobo.jetpackdemo

import android.os.CountDownTimer
import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent

/**
 *  Created by LC on 2024/11/12.
 *
 *  LifeCycle总结
 *  观察者模式三要素,观察者(Observer),被观察者(Observable),订阅关系(subscribe)
 *
 *  1.如果要是用LifeCycle,首先需要实现一个LifecycleObserver,让当前类可以感知(观察)宿主的生命周期
 *  2.需要一个宿主(被观察者),一般来讲就是一个activity,由于已经实现了LifeCycleOwner,所以可以省略
 *  3.通过lifecycle.addObserver(this)来产生订阅关系
 *  4.可以有效解决宿主对象控制其他控件的生命周期,让观察者可以跟随宿主的生命周期做出自行的判断,比如展示或者销毁
 *  5.不会造成内存泄漏
 */
class ADManager(adViewModel: ADViewModel) : LifecycleObserver {
    private val countDownTimer = object : CountDownTimer(adViewModel.timing, 1000) {
        override fun onTick(millisUntilFinished: Long) {
            Log.i("TagA", "广告剩余时间:${(millisUntilFinished / 1000).toInt()}秒")
//            //4.对应位置回调出内容
//            adManagerListener.timing((millisUntilFinished / 1000).toInt())
            adViewModel.setTimingResult(millisUntilFinished)
        }

        override fun onFinish() {
            Log.i("TagA", "广告结束,准备进入主页")
//            adManagerListener.finish()
        }
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun start() {
        countDownTimer.start()
        Log.i("TagA", "开始计时")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun cancel() {
        countDownTimer.cancel()
        Log.i("TagA", "结束计时")
    }

//    //接口回调4步
//    //1.创建接口
//    interface ADManagerListener {
//        fun timing(second: Int)
//        fun finish()
//    }
//
//    //2.声明接口
//    lateinit var adManagerListener: ADManagerListener
//
//    //3.给接口写一个set方法,kotlin中没有set,所以可以神龟,Java中需要写
}